package com.nciae.service;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

/**
 * 操作ElasticSearch
 */
public interface IElasticSearchService {

    /**
     * @param indexName：索引名
     * @return：返回索引库名
     */
    String createIndex(String indexName) throws IOException;

    /**
     * 查看索引
     * @param indexName：索引
     * @return
     */
    String selectIndex(String indexName) throws IOException;

    /**
     * 删除索引
     * @param indexName：索引名
     * @return
     */
    String deleteIndex(String indexName) throws IOException;

    /**
     * 创建映射字段
     * @param indexName：索引库名
     * @param typeName：类型名
     * @param body：方法体名
     * @return
     */
    String createMapping(String indexName, String typeName, String body) throws Exception;

    /**
     * 查看映射关系
     * @param indexName：索引库名
     * @return
     */
    String selectMapping(String indexName) throws IOException;

    /**
     * 向索引库类型中新增一条文档
     * @param indexName：索引名
     * @param typeName：类型名
     * @param body：方法体
     * @return
     */
    String postDocument(String indexName, String typeName, String body) throws IOException;

    /**
     * 向索引库类型中新增一条文档，指定ID
     * @param indexName：索引名
     * @param typeName：类型名
     * @param id：指定ID
     * @param body：方法体
     * @return
     */
    String postDocumentAppointId(String indexName,String typeName, String id, String body) throws IOException;

    /**
     * 修改索引库类型指定ID的文档
     * @param indexName：索引库名
     * @param typeName：类型名
     * @param id：ID名
     * @param body：方法体名
     * @return
     */
    String putDocumentAppointId(String indexName, String typeName, String id, String body) throws IOException;

    /**
     * 删除索引库类型的指定的ID名
     * @param indexName：索引名
     * @param typeName：类型名
     * @param id：ID名
     * @param body：方法体
     * @return
     */
    String deleteDocumentAppointId(String indexName, String typeName, String id, String body) throws IOException;

    /**
     * 基本查询(匹配查询，多字段查询,词条匹配，多词条精确匹配，结果过滤，布尔组合，范围查询，模糊查询，过滤，排序，多字段排序)
     * @param indexName：索引库名
     * @param body：方法体
     * @return
     */
    String baseSelect(String indexName, String body);

    /**
     * 对指定索引库默认查询所有
     * @param indexName：索引库
     * @return
     */
    String allSelect(String indexName);

}
